home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1996 May: Tool Chest / Developer CD Series May 1996 (Tool Chest) (Apple Computer) (1996).iso / Tool Chest / Interfaces & Libraries / Interfaces / PInterfaces / ColorPicker.p < prev    next >
Encoding:
Text File  |  1995-07-06  |  11.5 KB  |  478 lines  |  [TEXT/MPS ]

  1. {
  2.      File:        ColorPicker.p
  3.  
  4.      Contains:    Color Picker package Interfaces.
  5.  
  6.      Version:    Technology:    System 7.5
  7.                  Package:    Universal Interfaces 2.1 in “MPW Latest” on ETO #18
  8.  
  9.      Copyright:    © 1984-1995 by Apple Computer, Inc.
  10.                  All rights reserved.
  11.  
  12.      Bugs?:        If you find a problem with this file, use the Apple Bug Reporter
  13.                  stack.  Include the file and version information (from above)
  14.                  in the problem description and send to:
  15.                      Internet:    apple.bugs@applelink.apple.com
  16.                      AppleLink:    APPLE.BUGS
  17.  
  18. }
  19.  
  20. {$IFC UNDEFINED UsingIncludes}
  21. {$SETC UsingIncludes := 0}
  22. {$ENDC}
  23.  
  24. {$IFC NOT UsingIncludes}
  25.  UNIT ColorPicker;
  26.  INTERFACE
  27. {$ENDC}
  28.  
  29. {$IFC UNDEFINED __COLORPICKER__}
  30. {$SETC __COLORPICKER__ := 1}
  31.  
  32. {$I+}
  33. {$SETC ColorPickerIncludes := UsingIncludes}
  34. {$SETC UsingIncludes := 1}
  35.  
  36.  
  37. {$IFC UNDEFINED __QUICKDRAW__}
  38. {$I Quickdraw.p}
  39. {$ENDC}
  40. {    Types.p                                                        }
  41. {        ConditionalMacros.p                                        }
  42. {    MixedMode.p                                                    }
  43. {    QuickdrawText.p                                                }
  44.  
  45. {$IFC UNDEFINED __MIXEDMODE__}
  46. {$I MixedMode.p}
  47. {$ENDC}
  48.  
  49. {$IFC UNDEFINED __WINDOWS__}
  50. {$I Windows.p}
  51. {$ENDC}
  52. {    Memory.p                                                    }
  53. {    Events.p                                                    }
  54. {        OSUtils.p                                                }
  55. {    Controls.p                                                    }
  56. {        Menus.p                                                    }
  57.  
  58. {$IFC UNDEFINED __DIALOGS__}
  59. {$I Dialogs.p}
  60. {$ENDC}
  61. {    Errors.p                                                    }
  62. {    TextEdit.p                                                    }
  63.  
  64. {$IFC UNDEFINED __CMAPPLICATION__}
  65. {$I CMApplication.p}
  66. {$ENDC}
  67. {    Files.p                                                        }
  68. {        Finder.p                                                }
  69. {    Printing.p                                                    }
  70. {    CMICCProfile.p                                                }
  71.  
  72. {$IFC UNDEFINED __BALLOONS__}
  73. {$I Balloons.p}
  74. {$ENDC}
  75.  
  76. {$PUSH}
  77. {$ALIGN MAC68K}
  78. {$LibExport+}
  79.  
  80. CONST
  81. {Maximum small fract value, as long}
  82.     MaxSmallFract                = $0000FFFF;
  83.  
  84.     kDefaultWidth                = 383;
  85.     kDefaultHeight                = 238;
  86.  
  87.     kDidNothing                    = 0;
  88.     kColorChanged                = 1;
  89.     kOkHit                        = 2;
  90.     kCancelHit                    = 3;
  91.     kNewPickerChosen            = 4;
  92.     kApplItemHit                = 5;
  93.  
  94.     
  95. TYPE
  96.     PickerAction = INTEGER;
  97.  
  98.  
  99. CONST
  100.     kOriginalColor                = 0;
  101.     kNewColor                    = 1;
  102.  
  103.     
  104. TYPE
  105.     ColorType = INTEGER;
  106.  
  107.  
  108. CONST
  109.     kCut                        = 0;
  110.     kCopy                        = 1;
  111.     kPaste                        = 2;
  112.     kClear                        = 3;
  113.     kUndo                        = 4;
  114.  
  115.     
  116. TYPE
  117.     EditOperation = INTEGER;
  118.  
  119.  
  120. CONST
  121.     kMouseDown                    = 0;
  122.     kKeyDown                    = 1;
  123.     kFieldEntered                = 2;
  124.     kFieldLeft                    = 3;
  125.     kCutOp                        = 4;
  126.     kCopyOp                        = 5;
  127.     kPasteOp                    = 6;
  128.     kClearOp                    = 7;
  129.     kUndoOp                        = 8;
  130.  
  131.     
  132. TYPE
  133.     ItemModifier = INTEGER;
  134.  
  135.  
  136. CONST
  137.     kAtSpecifiedOrigin            = 0;
  138.     kDeepestColorScreen            = 1;
  139.     kCenterOnMainScreen            = 2;
  140.  
  141.     
  142. TYPE
  143.     DialogPlacementSpec = INTEGER;
  144.  
  145.  
  146. CONST
  147.     DialogIsMoveable            = 1;
  148.     DialogIsModal                = 2;
  149.     CanModifyPalette            = 4;
  150.     CanAnimatePalette            = 8;
  151.     AppIsColorSyncAware            = 16;
  152.     InSystemDialog                = 32;
  153.     InApplicationDialog            = 64;
  154.     InPickerDialog                = 128;
  155.     DetachedFromChoices            = 256;
  156.     CanDoColor                    = 1;
  157.     CanDoBlackWhite                = 2;
  158.     AlwaysModifiesPalette        = 4;
  159.     MayModifyPalette            = 8;
  160.     PickerIsColorSyncAware        = 16;
  161.     CanDoSystemDialog            = 32;
  162.     CanDoApplDialog                = 64;
  163.     HasOwnDialog                = 128;
  164.     CanDetach                    = 256;
  165.  
  166.     kNoForcast                    = 0;
  167.     kMenuChoice                    = 1;
  168.     kDialogAccept                = 2;
  169.     kDialogCancel                = 3;
  170.     kLeaveFocus                    = 4;
  171.     kPickerSwitch                = 5;
  172.     kNormalKeyDown                = 6;
  173.     kNormalMouseDown            = 7;
  174.  
  175.     
  176. TYPE
  177.     EventForcaster = INTEGER;
  178.  
  179. { A SmallFract value is just the fractional part of a Fixed number,
  180. which is the low order word.  SmallFracts are used to save room,
  181. and to be compatible with Quickdraw's RGBColor.  They can be
  182. assigned directly to and from INTEGERs. }
  183. { Unsigned fraction between 0 and 1 }
  184.     SmallFract = INTEGER;
  185.  
  186. { For developmental simplicity in switching between the HLS and HSV
  187. models, HLS is reordered into HSL. Thus both models start with
  188. hue and saturation values; value/lightness/brightness is last. }
  189.     HSVColor = RECORD
  190.         hue:                    SmallFract;                                {Fraction of circle, red at 0}
  191.         saturation:                SmallFract;                                {0-1, 0 for gray, 1 for pure color}
  192.         value:                    SmallFract;                                {0-1, 0 for black, 1 for max intensity}
  193.     END;
  194.  
  195.     HSLColor = RECORD
  196.         hue:                    SmallFract;                                {Fraction of circle, red at 0}
  197.         saturation:                SmallFract;                                {0-1, 0 for gray, 1 for pure color}
  198.         lightness:                SmallFract;                                {0-1, 0 for black, 1 for white}
  199.     END;
  200.  
  201.     CMYColor = RECORD
  202.         cyan:                    SmallFract;
  203.         magenta:                SmallFract;
  204.         yellow:                    SmallFract;
  205.     END;
  206.  
  207.     PMColor = RECORD
  208.         profile:                CMProfileHandle;
  209.         color:                    CMColor;
  210.     END;
  211.  
  212.     PMColorPtr = ^PMColor;
  213.  
  214.     picker = Ptr;
  215.  
  216.     PickerIconData = RECORD
  217.         scriptCode:                INTEGER;
  218.         iconSuiteID:            INTEGER;
  219.         helpResType:            ResType;
  220.         helpResID:                INTEGER;
  221.     END;
  222.  
  223.     PickerInitData = RECORD
  224.         pickerDialog:            DialogPtr;
  225.         choicesDialog:            DialogPtr;
  226.         flags:                    LONGINT;
  227.         yourself:                picker;
  228.     END;
  229.  
  230.     PickerMenuItemInfo = RECORD
  231.         editMenuID:                INTEGER;
  232.         cutItem:                INTEGER;
  233.         copyItem:                INTEGER;
  234.         pasteItem:                INTEGER;
  235.         clearItem:                INTEGER;
  236.         undoItem:                INTEGER;
  237.     END;
  238.  
  239.     PickerMenuState = RECORD
  240.         cutEnabled:                BOOLEAN;
  241.         copyEnabled:            BOOLEAN;
  242.         pasteEnabled:            BOOLEAN;
  243.         clearEnabled:            BOOLEAN;
  244.         undoEnabled:            BOOLEAN;
  245.         undoString:                Str255;
  246.     END;
  247.  
  248.     ColorChangedProcPtr = ProcPtr;  { PROCEDURE ColorChanged(userData: LONGINT; VAR newColor: PMColor); }
  249.     UserEventProcPtr = ProcPtr;  { FUNCTION UserEvent(VAR event: EventRecord): BOOLEAN; }
  250.     ColorChangedUPP = UniversalProcPtr;
  251.     UserEventUPP = UniversalProcPtr;
  252.  
  253.     ColorPickerInfo = RECORD
  254.         theColor:                PMColor;
  255.         dstProfile:                CMProfileHandle;
  256.         flags:                    LONGINT;
  257.         placeWhere:                DialogPlacementSpec;
  258.         dialogOrigin:            Point;
  259.         pickerType:                LONGINT;
  260.         eventProc:                UserEventUPP;
  261.         colorProc:                ColorChangedUPP;
  262.         colorProcData:            LONGINT;
  263.         prompt:                    Str255;
  264.         mInfo:                    PickerMenuItemInfo;
  265.         newColorChosen:            BOOLEAN;
  266.         filler:                    SInt8;
  267.     END;
  268.  
  269.     SystemDialogInfo = RECORD
  270.         flags:                    LONGINT;
  271.         pickerType:                LONGINT;
  272.         placeWhere:                DialogPlacementSpec;
  273.         dialogOrigin:            Point;
  274.         mInfo:                    PickerMenuItemInfo;
  275.     END;
  276.  
  277.     PickerDialogInfo = RECORD
  278.         flags:                    LONGINT;
  279.         pickerType:                LONGINT;
  280.         dialogOrigin:            ^Point;
  281.         mInfo:                    PickerMenuItemInfo;
  282.     END;
  283.  
  284.     ApplicationDialogInfo = RECORD
  285.         flags:                    LONGINT;
  286.         pickerType:                LONGINT;
  287.         theDialog:                DialogPtr;
  288.         pickerOrigin:            Point;
  289.         mInfo:                    PickerMenuItemInfo;
  290.     END;
  291.  
  292.     EventData = RECORD
  293.         event:                    ^EventRecord;
  294.         action:                    PickerAction;
  295.         itemHit:                INTEGER;
  296.         handled:                BOOLEAN;
  297.         filler:                    SInt8;
  298.         colorProc:                ColorChangedUPP;
  299.         colorProcData:            LONGINT;
  300.         forcast:                EventForcaster;
  301.     END;
  302.  
  303.     EditData = RECORD
  304.         theEdit:                EditOperation;
  305.         action:                    PickerAction;
  306.         handled:                BOOLEAN;
  307.         filler:                    SInt8;
  308.     END;
  309.  
  310.     ItemHitData = RECORD
  311.         itemHit:                INTEGER;
  312.         iMod:                    ItemModifier;
  313.         action:                    PickerAction;
  314.         colorProc:                ColorChangedUPP;
  315.         colorProcData:            LONGINT;
  316.         where:                    Point;
  317.     END;
  318.  
  319.     HelpItemInfo = RECORD
  320.         options:                LONGINT;
  321.         tip:                    Point;
  322.         altRect:                Rect;
  323.         theProc:                INTEGER;
  324.         helpVariant:            INTEGER;
  325.         helpMessage:            HMMessageRecord;
  326.     END;
  327.  
  328. {    Below are the color conversion routines.}
  329.  
  330. FUNCTION Fix2SmallFract(f: Fixed): SmallFract;
  331.     {$IFC NOT GENERATINGCFM}
  332.     INLINE $3F3C, $0001, $A82E;
  333.     {$ENDC}
  334. FUNCTION SmallFract2Fix(s: SmallFract): Fixed;
  335.     {$IFC NOT GENERATINGCFM}
  336.     INLINE $3F3C, $0002, $A82E;
  337.     {$ENDC}
  338. PROCEDURE CMY2RGB({CONST}VAR cColor: CMYColor; VAR rColor: RGBColor);
  339.     {$IFC NOT GENERATINGCFM}
  340.     INLINE $3F3C, $0003, $A82E;
  341.     {$ENDC}
  342. PROCEDURE RGB2CMY({CONST}VAR rColor: RGBColor; VAR cColor: CMYColor);
  343.     {$IFC NOT GENERATINGCFM}
  344.     INLINE $3F3C, $0004, $A82E;
  345.     {$ENDC}
  346. PROCEDURE HSL2RGB({CONST}VAR hColor: HSLColor; VAR rColor: RGBColor);
  347.     {$IFC NOT GENERATINGCFM}
  348.     INLINE $3F3C, $0005, $A82E;
  349.     {$ENDC}
  350. PROCEDURE RGB2HSL({CONST}VAR rColor: RGBColor; VAR hColor: HSLColor);
  351.     {$IFC NOT GENERATINGCFM}
  352.     INLINE $3F3C, $0006, $A82E;
  353.     {$ENDC}
  354. PROCEDURE HSV2RGB({CONST}VAR hColor: HSVColor; VAR rColor: RGBColor);
  355.     {$IFC NOT GENERATINGCFM}
  356.     INLINE $3F3C, $0007, $A82E;
  357.     {$ENDC}
  358. PROCEDURE RGB2HSV({CONST}VAR rColor: RGBColor; VAR hColor: HSVColor);
  359.     {$IFC NOT GENERATINGCFM}
  360.     INLINE $3F3C, $0008, $A82E;
  361.     {$ENDC}
  362. {    Below brings up the ColorPicker 1.0 Dialog}
  363. FUNCTION GetColor(where: Point; prompt: ConstStr255Param; {CONST}VAR inColor: RGBColor; VAR outColor: RGBColor): BOOLEAN;
  364.     {$IFC NOT GENERATINGCFM}
  365.     INLINE $3F3C, $0009, $A82E;
  366.     {$ENDC}
  367. {    Below are the ColorPicker 2.0 routines.}
  368. FUNCTION PickColor(VAR theColorInfo: ColorPickerInfo): OSErr;
  369.     {$IFC NOT GENERATINGCFM}
  370.     INLINE $3F3C, $0213, $A82E;
  371.     {$ENDC}
  372. FUNCTION AddPickerToDialog(VAR info: ApplicationDialogInfo; VAR thePicker: picker): OSErr;
  373.     {$IFC NOT GENERATINGCFM}
  374.     INLINE $3F3C, $0414, $A82E;
  375.     {$ENDC}
  376. FUNCTION CreateColorDialog(VAR info: SystemDialogInfo; VAR thePicker: picker): OSErr;
  377.     {$IFC NOT GENERATINGCFM}
  378.     INLINE $3F3C, $0415, $A82E;
  379.     {$ENDC}
  380. FUNCTION CreatePickerDialog(VAR info: PickerDialogInfo; VAR thePicker: picker): OSErr;
  381.     {$IFC NOT GENERATINGCFM}
  382.     INLINE $3F3C, $0416, $A82E;
  383.     {$ENDC}
  384. FUNCTION DisposeColorPicker(thePicker: picker): OSErr;
  385.     {$IFC NOT GENERATINGCFM}
  386.     INLINE $3F3C, $0217, $A82E;
  387.     {$ENDC}
  388. FUNCTION GetPickerVisibility(thePicker: picker; VAR visible: BOOLEAN): OSErr;
  389.     {$IFC NOT GENERATINGCFM}
  390.     INLINE $3F3C, $0418, $A82E;
  391.     {$ENDC}
  392. FUNCTION SetPickerVisibility(thePicker: picker; visible: INTEGER): OSErr;
  393.     {$IFC NOT GENERATINGCFM}
  394.     INLINE $3F3C, $0319, $A82E;
  395.     {$ENDC}
  396. FUNCTION SetPickerPrompt(thePicker: picker; VAR promptString: Str255): OSErr;
  397.     {$IFC NOT GENERATINGCFM}
  398.     INLINE $3F3C, $041a, $A82E;
  399.     {$ENDC}
  400. FUNCTION DoPickerEvent(thePicker: picker; VAR data: EventData): OSErr;
  401.     {$IFC NOT GENERATINGCFM}
  402.     INLINE $3F3C, $041b, $A82E;
  403.     {$ENDC}
  404. FUNCTION DoPickerEdit(thePicker: picker; VAR data: EditData): OSErr;
  405.     {$IFC NOT GENERATINGCFM}
  406.     INLINE $3F3C, $041c, $A82E;
  407.     {$ENDC}
  408. FUNCTION DoPickerDraw(thePicker: picker): OSErr;
  409.     {$IFC NOT GENERATINGCFM}
  410.     INLINE $3F3C, $021d, $A82E;
  411.     {$ENDC}
  412. FUNCTION GetPickerColor(thePicker: picker; whichColor: ColorType; VAR color: PMColor): OSErr;
  413.     {$IFC NOT GENERATINGCFM}
  414.     INLINE $3F3C, $051e, $A82E;
  415.     {$ENDC}
  416. FUNCTION SetPickerColor(thePicker: picker; whichColor: ColorType; VAR color: PMColor): OSErr;
  417.     {$IFC NOT GENERATINGCFM}
  418.     INLINE $3F3C, $051f, $A82E;
  419.     {$ENDC}
  420. FUNCTION GetPickerOrigin(thePicker: picker; VAR where: Point): OSErr;
  421.     {$IFC NOT GENERATINGCFM}
  422.     INLINE $3F3C, $0420, $A82E;
  423.     {$ENDC}
  424. FUNCTION SetPickerOrigin(thePicker: picker; where: Point): OSErr;
  425.     {$IFC NOT GENERATINGCFM}
  426.     INLINE $3F3C, $0421, $A82E;
  427.     {$ENDC}
  428. FUNCTION GetPickerProfile(thePicker: picker; VAR profile: CMProfileHandle): OSErr;
  429.     {$IFC NOT GENERATINGCFM}
  430.     INLINE $3F3C, $0422, $A82E;
  431.     {$ENDC}
  432. FUNCTION SetPickerProfile(thePicker: picker; profile: CMProfileHandle): OSErr;
  433.     {$IFC NOT GENERATINGCFM}
  434.     INLINE $3F3C, $0423, $A82E;
  435.     {$ENDC}
  436. FUNCTION GetPickerEditMenuState(thePicker: picker; VAR mState: PickerMenuState): OSErr;
  437.     {$IFC NOT GENERATINGCFM}
  438.     INLINE $3F3C, $0424, $A82E;
  439.     {$ENDC}
  440. FUNCTION ExtractPickerHelpItem(thePicker: picker; itemNo: INTEGER; whichState: INTEGER; VAR helpInfo: HelpItemInfo): OSErr;
  441.     {$IFC NOT GENERATINGCFM}
  442.     INLINE $3F3C, $0625, $A82E;
  443.     {$ENDC}
  444. CONST
  445.     uppColorChangedProcInfo = $000003C0; { PROCEDURE (4 byte param, 4 byte param); }
  446.     uppUserEventProcInfo = $000000D0; { FUNCTION (4 byte param): 1 byte result; }
  447.  
  448. FUNCTION NewColorChangedProc(userRoutine: ColorChangedProcPtr): ColorChangedUPP;
  449.     {$IFC NOT GENERATINGCFM }
  450.     INLINE $2E9F;
  451.     {$ENDC}
  452.  
  453. FUNCTION NewUserEventProc(userRoutine: UserEventProcPtr): UserEventUPP;
  454.     {$IFC NOT GENERATINGCFM }
  455.     INLINE $2E9F;
  456.     {$ENDC}
  457.  
  458. PROCEDURE CallColorChangedProc(userData: LONGINT; VAR newColor: PMColor; userRoutine: ColorChangedUPP);
  459.     {$IFC NOT GENERATINGCFM}
  460.     INLINE $205F, $4E90;
  461.     {$ENDC}
  462.  
  463. FUNCTION CallUserEventProc(VAR event: EventRecord; userRoutine: UserEventUPP): BOOLEAN;
  464.     {$IFC NOT GENERATINGCFM}
  465.     INLINE $205F, $4E90;
  466.     {$ENDC}
  467.  
  468. {$ALIGN RESET}
  469. {$POP}
  470.  
  471. {$SETC UsingIncludes := ColorPickerIncludes}
  472.  
  473. {$ENDC} {__COLORPICKER__}
  474.  
  475. {$IFC NOT UsingIncludes}
  476.  END.
  477. {$ENDC}
  478.